package circularQueue;

// 模拟实现循环队列的功能
// 浪费空间的方法！
// 在数组中进行存储

class MyCircularQueue2 {
    public int[] array;
    public int front;
    public int rear;

    public MyCircularQueue2(int k) {
        array = new int[k+1]; // 为了满足实际需要的大小，k+1
    }

    // 入队
    public boolean enQueue(int value) {
        if(isFull()) {
            return false;
        }
        this.array[rear] = value;
        this.rear = (this.rear+1)%array.length;
        return true;
    }

    // 出队：删除队头
    public boolean deQueue() {
        if(isEmpty()) {
            return false;
        }
        this.front = (this.front+1)%array.length;
        return true;
    }

    // 获取队头
    public int Front() {
        if(isEmpty()) {
            return -1;
        }
        return this.array[front];
    }
    
    public int Rear() {
        if(isEmpty()) {
            return -1;
        }
        // 一直都不会放满 但是所存储元素是够的一定
        int index = (rear==0)?(array.length-1):(rear-1);
        return this.array[index];
    }
    
    public boolean isEmpty() {
        return (this.front == this.rear);
    }
    
    public boolean isFull() {
        return ((this.rear+1) % array.length ==this.front); // 浪费一个空间的做法
    }

    // 模拟一个打印操作：实际上没有这个方法
    public void print() {
        for (int i=this.front; i<this.rear; i++) { //注意循环条件！！！不是从0开始！！！
            System.out.print(this.array[i] + " ");
        }
        System.out.println();
    }
}
